by: Atrylli Maria
Esse projeto foi construído para colocar em prática meu conhecimento (básico) em análise de dados, ao longo do processo consultei vários artigos/posts que explicavam sobre boas práticas dentro da área e como realizar a manipulação dos dados.
# Bibliotecas utilizadas
import pandas as pd
import json
import folium
from branca.colormap import linear
import plotly.graph_objects as go
import plotly.express as px
from folium.plugins import MarkerCluster
from branca.element import Template, MacroElement
# Dataframes utilizados
df = pd.read_csv("HIST_PAINEL_COVIDBR_2023_Parte1_27fev2023.csv", sep=';', decimal=',')
estados_ibge = pd.read_csv("estados_POP2021_20221212.csv", sep=';')
df[:344]
| regiao | estado | municipio | coduf | codmun | codRegiaoSaude | nomeRegiaoSaude | data | semanaEpi | populacaoTCU2019 | casosAcumulado | casosNovos | obitosAcumulado | obitosNovos | Recuperadosnovos | emAcompanhamentoNovos | interior/metropolitana | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Brasil | NaN | NaN | 76 | NaN | NaN | NaN | 2023-01-01 | 1 | 210147125.0 | 36331281 | 0 | 693853 | 0 | 35006153.0 | 631275.0 | NaN |
| 1 | Brasil | NaN | NaN | 76 | NaN | NaN | NaN | 2023-01-02 | 1 | 210147125.0 | 36362366 | 31085 | 693981 | 128 | 35081933.0 | 586452.0 | NaN |
| 2 | Brasil | NaN | NaN | 76 | NaN | NaN | NaN | 2023-01-03 | 1 | 210147125.0 | 36390423 | 28057 | 694192 | 211 | 35147500.0 | 548731.0 | NaN |
| 3 | Brasil | NaN | NaN | 76 | NaN | NaN | NaN | 2023-01-04 | 1 | 210147125.0 | 36423138 | 32715 | 694411 | 219 | 35196324.0 | 532403.0 | NaN |
| 4 | Brasil | NaN | NaN | 76 | NaN | NaN | NaN | 2023-01-05 | 1 | 210147125.0 | 36450812 | 27674 | 694569 | 158 | 35225196.0 | 531047.0 | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 339 | Norte | PA | NaN | 15 | NaN | NaN | NaN | 2023-02-19 | 8 | 8602865.0 | 869319 | 7 | 19009 | 0 | NaN | NaN | NaN |
| 340 | Norte | PA | NaN | 15 | NaN | NaN | NaN | 2023-02-20 | 8 | 8602865.0 | 869371 | 52 | 19010 | 1 | NaN | NaN | NaN |
| 341 | Norte | PA | NaN | 15 | NaN | NaN | NaN | 2023-02-21 | 8 | 8602865.0 | 869380 | 9 | 19010 | 0 | NaN | NaN | NaN |
| 342 | Norte | PA | NaN | 15 | NaN | NaN | NaN | 2023-02-22 | 8 | 8602865.0 | 869385 | 5 | 19010 | 0 | NaN | NaN | NaN |
| 343 | Norte | PA | NaN | 15 | NaN | NaN | NaN | 2023-02-23 | 8 | 8602865.0 | 869551 | 166 | 19011 | 1 | NaN | NaN | NaN |
344 rows × 17 columns
# Mostra o tamanho do dataframe
len(df.index)
325902
# Retorna a quantidade de linhas com informações dentro da coluna
df[df.columns].count()
regiao 325902 estado 325844 municipio 323060 coduf 325902 codmun 324278 codRegiaoSaude 323060 nomeRegiaoSaude 323060 data 325902 semanaEpi 325902 populacaoTCU2019 324684 casosAcumulado 325902 casosNovos 325902 obitosAcumulado 325902 obitosNovos 325902 Recuperadosnovos 58 emAcompanhamentoNovos 58 interior/metropolitana 323060 dtype: int64
# Excluindo coluna que não será utilizada
df.drop('interior/metropolitana', axis=1, inplace=True)
# Retorna True colunas que possuem valores vazios
df.isna().any()
regiao False estado True municipio True coduf False codmun True codRegiaoSaude True nomeRegiaoSaude True data False semanaEpi False populacaoTCU2019 True casosAcumulado False casosNovos False obitosAcumulado False obitosNovos False Recuperadosnovos True emAcompanhamentoNovos True dtype: bool
# Soma os valores vazios dentro de cada coluna
df.isna().sum()
regiao 0 estado 58 municipio 2842 coduf 0 codmun 1624 codRegiaoSaude 2842 nomeRegiaoSaude 2842 data 0 semanaEpi 0 populacaoTCU2019 1218 casosAcumulado 0 casosNovos 0 obitosAcumulado 0 obitosNovos 0 Recuperadosnovos 325844 emAcompanhamentoNovos 325844 dtype: int64
# Soma de valores duplicados dentro do dataframe
df.duplicated().sum()
0
df.describe()
| coduf | codmun | codRegiaoSaude | semanaEpi | populacaoTCU2019 | casosAcumulado | casosNovos | obitosAcumulado | obitosNovos | Recuperadosnovos | emAcompanhamentoNovos | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 325902.000000 | 324278.00000 | 323060.000000 | 325902.000000 | 3.246840e+05 | 3.259020e+05 | 325902.000000 | 325902.000000 | 325902.000000 | 5.800000e+01 | 58.000000 |
| mean | 32.360384 | 325258.01413 | 32403.123698 | 4.655172 | 1.126190e+05 | 1.963460e+04 | 6.507622 | 371.963115 | 0.047435 | 3.578935e+07 | 289568.000000 |
| std | 9.873311 | 98535.17613 | 9836.356530 | 2.396493 | 2.935319e+06 | 5.097196e+05 | 1136.276533 | 9807.732450 | 24.966663 | 3.351955e+05 | 140641.253887 |
| min | 11.000000 | 110000.00000 | 11001.000000 | 1.000000 | 7.810000e+02 | 0.000000e+00 | -295586.000000 | 0.000000 | -6602.000000 | 3.500615e+07 | 122813.000000 |
| 25% | 25.000000 | 251200.00000 | 25010.000000 | 3.000000 | 5.474000e+03 | 8.280000e+02 | 0.000000 | 11.000000 | 0.000000 | 3.554831e+07 | 175012.750000 |
| 50% | 31.000000 | 314610.00000 | 31059.000000 | 5.000000 | 1.168900e+04 | 1.723000e+03 | 0.000000 | 25.000000 | 0.000000 | 3.587205e+07 | 232446.000000 |
| 75% | 41.000000 | 411915.00000 | 41015.000000 | 7.000000 | 2.576200e+04 | 4.220000e+03 | 0.000000 | 63.000000 | 0.000000 | 3.607666e+07 | 387598.000000 |
| max | 76.000000 | 530010.00000 | 53001.000000 | 9.000000 | 2.101471e+08 | 3.703823e+07 | 295598.000000 | 699006.000000 | 6602.000000 | 3.621641e+07 | 631275.000000 |
df[df.estado.isnull() == False]
| regiao | estado | municipio | coduf | codmun | codRegiaoSaude | nomeRegiaoSaude | data | semanaEpi | populacaoTCU2019 | casosAcumulado | casosNovos | obitosAcumulado | obitosNovos | Recuperadosnovos | emAcompanhamentoNovos | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 58 | Norte | RO | NaN | 11 | NaN | NaN | NaN | 2023-01-01 | 1 | 1777225.0 | 471673 | 0 | 7399 | 0 | NaN | NaN |
| 59 | Norte | RO | NaN | 11 | NaN | NaN | NaN | 2023-01-02 | 1 | 1777225.0 | 472112 | 439 | 7400 | 1 | NaN | NaN |
| 60 | Norte | RO | NaN | 11 | NaN | NaN | NaN | 2023-01-03 | 1 | 1777225.0 | 472459 | 347 | 7401 | 1 | NaN | NaN |
| 61 | Norte | RO | NaN | 11 | NaN | NaN | NaN | 2023-01-04 | 1 | 1777225.0 | 473198 | 739 | 7404 | 3 | NaN | NaN |
| 62 | Norte | RO | NaN | 11 | NaN | NaN | NaN | 2023-01-05 | 1 | 1777225.0 | 473724 | 526 | 7406 | 2 | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 325897 | Centro-Oeste | DF | Brasília | 53 | 530010.0 | 53001.0 | DISTRITO FEDERAL | 2023-02-23 | 8 | 3015268.0 | 896716 | 659 | 11843 | 0 | NaN | NaN |
| 325898 | Centro-Oeste | DF | Brasília | 53 | 530010.0 | 53001.0 | DISTRITO FEDERAL | 2023-02-24 | 8 | 3015268.0 | 896808 | 92 | 11843 | 0 | NaN | NaN |
| 325899 | Centro-Oeste | DF | Brasília | 53 | 530010.0 | 53001.0 | DISTRITO FEDERAL | 2023-02-25 | 8 | 3015268.0 | 896808 | 0 | 11843 | 0 | NaN | NaN |
| 325900 | Centro-Oeste | DF | Brasília | 53 | 530010.0 | 53001.0 | DISTRITO FEDERAL | 2023-02-26 | 9 | 3015268.0 | 896808 | 0 | 11843 | 0 | NaN | NaN |
| 325901 | Centro-Oeste | DF | Brasília | 53 | 530010.0 | 53001.0 | DISTRITO FEDERAL | 2023-02-27 | 9 | 3015268.0 | 897058 | 250 | 11843 | 0 | NaN | NaN |
325844 rows × 16 columns
# Pega os valores máximos de obitos acumulados por cada estado
obitosAc = df.groupby(['estado'])['obitosAcumulado'].max()
obitosAc
estado AC 2043 AL 7242 AM 14433 AP 2167 BA 31451 CE 28114 DF 11843 ES 15039 GO 28026 MA 11051 MG 65471 MS 11004 MT 15087 PA 19014 PB 10541 PE 22680 PI 8354 PR 46004 RJ 76817 RN 8715 RO 7430 RR 2180 RS 41908 SC 22701 SE 6502 SP 178957 TO 4232 Name: obitosAcumulado, dtype: int64
# Retornar os valores máximos de casos acumulados por estado
casosAc = df.groupby(['estado'])['casosAcumulado'].max()
casosAc
estado AC 160386 AL 337444 AM 630494 AP 185457 BA 1791455 CE 1452395 DF 897058 ES 1322373 GO 1895082 MA 493170 MG 4190922 MS 606906 MT 878360 PA 870136 PB 707617 PE 1154492 PI 424866 PR 2916967 RJ 2745792 RN 585806 RO 482654 RR 182282 RS 2959192 SC 1983986 SE 359644 SP 6457756 TO 365538 Name: casosAcumulado, dtype: int64
# Essa tabela foi construída bem depois, para realizar algumas introduções na visualização do mapa (os últimos gráficos)
covid = pd.merge(estados_ibge, casosAc, how='inner', on='estado')
covid = pd.merge(covid, obitosAc, how='inner', on='estado')
covid
| nome | estado | populacao | latitude | longitude | casosAcumulado | obitosAcumulado | |
|---|---|---|---|---|---|---|---|
| 0 | Rondônia | RO | 1815278 | -10.83 | -63.34 | 482654 | 7430 |
| 1 | Acre | AC | 906876 | -8.77 | -70.55 | 160386 | 2043 |
| 2 | Amazonas | AM | 4269995 | -3.47 | -65.10 | 630494 | 14433 |
| 3 | Roraima | RR | 652713 | 1.99 | -61.33 | 182282 | 2180 |
| 4 | Pará | PA | 8777124 | -3.79 | -52.48 | 870136 | 19014 |
| 5 | Amapá | AP | 877613 | 1.41 | -51.77 | 185457 | 2167 |
| 6 | Tocantins | TO | 1607363 | -9.46 | -48.26 | 365538 | 4232 |
| 7 | Maranhão | MA | 7153262 | -5.42 | -45.44 | 493170 | 11051 |
| 8 | Piauí | PI | 3289290 | -6.60 | -42.28 | 424866 | 8354 |
| 9 | Ceará | CE | 9240580 | -5.20 | -39.53 | 1452395 | 28114 |
| 10 | Rio Grande do Norte | RN | 3560903 | -5.81 | -36.59 | 585806 | 8715 |
| 11 | Paraíba | PB | 4059905 | -7.28 | -36.72 | 707617 | 10541 |
| 12 | Pernambuco | PE | 9674793 | -8.38 | -37.86 | 1154492 | 22680 |
| 13 | Alagoas | AL | 3365351 | -9.62 | -36.82 | 337444 | 7242 |
| 14 | Sergipe | SE | 2338474 | -10.57 | -37.45 | 359644 | 6502 |
| 15 | Bahia | BA | 14985284 | -13.29 | -41.71 | 1791455 | 31451 |
| 16 | Minas Gerais | MG | 21411923 | -18.10 | -44.38 | 4190922 | 65471 |
| 17 | Espírito Santo | ES | 4108508 | -19.19 | -40.34 | 1322373 | 15039 |
| 18 | Rio de Janeiro | RJ | 17463349 | -22.25 | -42.66 | 2745792 | 76817 |
| 19 | São Paulo | SP | 46649132 | -22.19 | -48.79 | 6457756 | 178957 |
| 20 | Paraná | PR | 11597484 | -24.89 | -51.55 | 2916967 | 46004 |
| 21 | Santa Catarina | SC | 7338473 | -27.45 | -50.95 | 1983986 | 22701 |
| 22 | Rio Grande do Sul | RS | 11466630 | -30.17 | -53.50 | 2959192 | 41908 |
| 23 | Mato Grosso do Sul | MS | 2839188 | -20.51 | -54.54 | 606906 | 11004 |
| 24 | Mato Grosso | MT | 3567234 | -12.64 | -55.42 | 878360 | 15087 |
| 25 | Goiás | GO | 7206589 | -15.98 | -49.86 | 1895082 | 28026 |
| 26 | Distrito Federal | DF | 3094325 | -15.83 | -47.86 | 897058 | 11843 |
# Algumas colunas introduzidas dentro do dataframe Covid
# Calculo da porcentagem de casos acumulados para a quantidade de população de cada estado
covid['perc_casos'] = covid['casosAcumulado']/covid['populacao']*100
# Calculo de porcentagem de obitos acumulados para cada caso acumulado
covid['perc_obitos'] = covid['obitosAcumulado']/covid['casosAcumulado']*100
covid
| nome | estado | populacao | latitude | longitude | casosAcumulado | obitosAcumulado | perc_casos | perc_obitos | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | Rondônia | RO | 1815278 | -10.83 | -63.34 | 482654 | 7430 | 26.588434 | 1.539405 |
| 1 | Acre | AC | 906876 | -8.77 | -70.55 | 160386 | 2043 | 17.685549 | 1.273802 |
| 2 | Amazonas | AM | 4269995 | -3.47 | -65.10 | 630494 | 14433 | 14.765685 | 2.289157 |
| 3 | Roraima | RR | 652713 | 1.99 | -61.33 | 182282 | 2180 | 27.926822 | 1.195949 |
| 4 | Pará | PA | 8777124 | -3.79 | -52.48 | 870136 | 19014 | 9.913680 | 2.185176 |
| 5 | Amapá | AP | 877613 | 1.41 | -51.77 | 185457 | 2167 | 21.131980 | 1.168465 |
| 6 | Tocantins | TO | 1607363 | -9.46 | -48.26 | 365538 | 4232 | 22.741472 | 1.157746 |
| 7 | Maranhão | MA | 7153262 | -5.42 | -45.44 | 493170 | 11051 | 6.894337 | 2.240809 |
| 8 | Piauí | PI | 3289290 | -6.60 | -42.28 | 424866 | 8354 | 12.916648 | 1.966267 |
| 9 | Ceará | CE | 9240580 | -5.20 | -39.53 | 1452395 | 28114 | 15.717574 | 1.935699 |
| 10 | Rio Grande do Norte | RN | 3560903 | -5.81 | -36.59 | 585806 | 8715 | 16.451052 | 1.487694 |
| 11 | Paraíba | PB | 4059905 | -7.28 | -36.72 | 707617 | 10541 | 17.429398 | 1.489648 |
| 12 | Pernambuco | PE | 9674793 | -8.38 | -37.86 | 1154492 | 22680 | 11.932989 | 1.964500 |
| 13 | Alagoas | AL | 3365351 | -9.62 | -36.82 | 337444 | 7242 | 10.027008 | 2.146134 |
| 14 | Sergipe | SE | 2338474 | -10.57 | -37.45 | 359644 | 6502 | 15.379431 | 1.807899 |
| 15 | Bahia | BA | 14985284 | -13.29 | -41.71 | 1791455 | 31451 | 11.954762 | 1.755612 |
| 16 | Minas Gerais | MG | 21411923 | -18.10 | -44.38 | 4190922 | 65471 | 19.572843 | 1.562210 |
| 17 | Espírito Santo | ES | 4108508 | -19.19 | -40.34 | 1322373 | 15039 | 32.186210 | 1.137274 |
| 18 | Rio de Janeiro | RJ | 17463349 | -22.25 | -42.66 | 2745792 | 76817 | 15.723170 | 2.797626 |
| 19 | São Paulo | SP | 46649132 | -22.19 | -48.79 | 6457756 | 178957 | 13.843250 | 2.771195 |
| 20 | Paraná | PR | 11597484 | -24.89 | -51.55 | 2916967 | 46004 | 25.151723 | 1.577118 |
| 21 | Santa Catarina | SC | 7338473 | -27.45 | -50.95 | 1983986 | 22701 | 27.035406 | 1.144212 |
| 22 | Rio Grande do Sul | RS | 11466630 | -30.17 | -53.50 | 2959192 | 41908 | 25.806989 | 1.416197 |
| 23 | Mato Grosso do Sul | MS | 2839188 | -20.51 | -54.54 | 606906 | 11004 | 21.376041 | 1.813131 |
| 24 | Mato Grosso | MT | 3567234 | -12.64 | -55.42 | 878360 | 15087 | 24.622999 | 1.717633 |
| 25 | Goiás | GO | 7206589 | -15.98 | -49.86 | 1895082 | 28026 | 26.296518 | 1.478881 |
| 26 | Distrito Federal | DF | 3094325 | -15.83 | -47.86 | 897058 | 11843 | 28.990426 | 1.320204 |
# Retornar os estados com maior quantidade de casosAcumulados
maiores_casos = covid.sort_values(
["casosAcumulado"], axis=0,
ascending=[False], inplace=True
)
maiores_casos = covid.head(3)
maiores_casos
| nome | estado | populacao | latitude | longitude | casosAcumulado | obitosAcumulado | perc_casos | perc_obitos | |
|---|---|---|---|---|---|---|---|---|---|
| 19 | São Paulo | SP | 46649132 | -22.19 | -48.79 | 6457756 | 178957 | 13.843250 | 2.771195 |
| 16 | Minas Gerais | MG | 21411923 | -18.10 | -44.38 | 4190922 | 65471 | 19.572843 | 1.562210 |
| 22 | Rio Grande do Sul | RS | 11466630 | -30.17 | -53.50 | 2959192 | 41908 | 25.806989 | 1.416197 |
# Retornar os estados com maior quantidade de óbitos acumulados
maiores_obitos = covid.sort_values(
["obitosAcumulado"], axis=0,
ascending=[False], inplace=True
)
maiores_obitos = covid.head(3)
maiores_obitos
| nome | estado | populacao | latitude | longitude | casosAcumulado | obitosAcumulado | perc_casos | perc_obitos | |
|---|---|---|---|---|---|---|---|---|---|
| 19 | São Paulo | SP | 46649132 | -22.19 | -48.79 | 6457756 | 178957 | 13.843250 | 2.771195 |
| 18 | Rio de Janeiro | RJ | 17463349 | -22.25 | -42.66 | 2745792 | 76817 | 15.723170 | 2.797626 |
| 16 | Minas Gerais | MG | 21411923 | -18.10 | -44.38 | 4190922 | 65471 | 19.572843 | 1.562210 |
# Gráfico de linha e colunas
# Mostra a quantidade de casos e óbitos acumulados, junto com a quantidade populacional de cada estado brasileiro
fig_COP = go.Figure()
fig_COP.add_trace(go.Scatter(
x=covid['estado'],
y=covid['populacao'],
name = "População",
mode = "lines+markers",
marker = {'color': '#C1403D'},
))
fig_COP.add_trace(go.Bar(
x = covid['estado'],
y = covid['casosAcumulado'],
name = "Casos",
marker = {'color': '#0294A5'},
))
fig_COP.add_trace(go.Bar(
x = covid['estado'],
y = covid['obitosAcumulado'],
name = "Obitos",
marker = {'color': '#04060F'},
))
fig_COP.update_xaxes(title_text='Estados')
fig_COP.update_yaxes(title_text='População')
fig_COP.update_layout(title_text="Projeção da quantidade populacional, casos de COVID-19 e óbitos por COVID-19")
fig_COP.show()
# Gráfico de linha e coluna
# Esse gráfico mostra os 3 estados com maior quantidade de casos acumulados e a quantidade populacional
estados_casosM = go.Figure()
estados_casosM.add_trace(go.Scatter(
x=maiores_casos['estado'],
y=maiores_casos['populacao'],
name = "População",
mode = "lines+markers",
marker = {'color': '#C1403D'},
))
estados_casosM.add_trace(go.Bar(
x = maiores_casos['estado'],
y = maiores_casos['casosAcumulado'],
name = "Casos",
marker = {'color': '#0294A5'},
))
estados_casosM.update_xaxes(title_text='Estados')
estados_casosM.update_yaxes(title_text='População')
estados_casosM.update_layout(title_text="Estados com maior quantidade de casos acumulados por COVID-19 e sua população (2023)")
estados_casosM.show()
# Gráfico de barras horizontais
# Mostra os 3 estados com maior quantidade de óbitos acumulados e sua população
estados_obitosM = px.bar(maiores_obitos, x="obitosAcumulado", y="populacao", color='estado', orientation='h',
hover_data=["obitosAcumulado", "populacao"],
height=400,
title='Estados com maior quantidade de óbitos acumulados por COVID-19 e sua população (2023)',
labels={"obitosAcumulado":"Óbitos acumulados por estado", "populacao":"População por estado", "estado":"Estados Brasileiros"}
)
estados_obitosM.show()
Esses trechos de código serviram como prática, para entender melhor como funcionava cada biblioteca e poder visualizar como poderia introduzir os dados em cima do mapa.
# Utiliza a latitude e longitude para visualizar o Brasil em um mapa mundi, aplicando o zoom para determinar uma distância na visualização.
mapa = folium.Map(location = [-15.842866484776115, -48.026985518146226], zoom_start = 4)
mapa
# Utiliza a função json.load e o caminho do documento para abrir o arquivo json do IBGE.
# Você precisa substituir e colocar o caminho que está dentro do seu computador.
estados_geoJSON = json.load(open('/Users/atryl/Documents/geojson/br_states.json'))
# Location - recebe a latitude e longitude que deseja ser visualizada.
# width e height - altura e largura da projeção da imagem do mapa.
# zoom_start - aproximação da imagem.
# Criação do mapa
mapa = folium.Map(
location = [-15.77972, -47.92972],
width=600,
height=600,
zoom_start=3
)
# Utiliza o Folium e GeoJSON para manipular o arquivo .json dos estados e adiciona no mapa criado.
folium.GeoJson(estados_geoJSON).add_to(mapa)
mapa
# Criação do mapa
mapa = folium.Map(
location = [-15.77972, -47.92972],
width = 600,
height = 600,
zoom_start = 3
)
# Aplicando a demarcações dos estados e adicionando modificações no estilo da visualização.
folium.GeoJson(
estados_geoJSON,
style_function = lambda feature: {
'fillColor': 'green',
'color': 'darkgreen',
'weight': 0.5,
}
).add_to(mapa)
mapa
# Função com o código da variação das cores
# A escala é definida de acordo com os valores de casos, foi utilizado o valor do AC como menor e SP como maior
colorCasos = linear.YlOrRd_09.scale(160000,6500000)
colorCasos
colorObitos = linear.YlOrRd_09.scale(2000, 180000)
colorObitos
# Gerando o mapa
mapa = folium.Map(
location = [-15.77972, -47.92972],
width = 600,
height = 600,
zoom_start = 4
)
# Aplicando os dados json e modificando o estilo de visualização
# em 'fillColor' é utilizado o id dentro do json indicando cada estado, relacionando com os obitosAc e a paleta de cores colorObitos
folium.GeoJson(
estados_geoJSON,
name='Óbitos Acumulados por COVID-19 em 2023',
style_function=lambda feature: {
'fillColor': colorObitos(obitosAc[feature['id']]),
'color': 'darkgrenn',
'weight': 0.3,
}
).add_to(mapa)
# Adicionando título a legenda
colorObitos.caption = 'Obitos Acumulados de Covid no Brasil por Estado (2023)'
colorObitos.add_to(mapa)
# Cria um painel de controle (nesse caso, pode selecionar se quiser visualizar os obitos Acumulados)
folium.LayerControl(collapsed = False).add_to(mapa)
mapa.save('covid_obitos_br_2023.html')
mapa
# O mesmo procedimento realizado com óbitos acumulados (código acima)
# Aqui mostra a quantidade de Casos Acumulados
mapa = folium.Map(
width = 600,
height = 600,
location = [-15.77972, -47.92972],
zoom_start = 4
)
folium.GeoJson(
estados_geoJSON,
name='Casos Acumulados de COVID-19 em 2023',
style_function=lambda feature: {
'fillColor': colorCasos(casosAc[feature['id']]),
'weight': 0.3,
}
).add_to(mapa)
colorCasos.caption = 'Casos Acumulados de Covid no Brasil por Estado (2023)'
colorCasos.add_to(mapa)
folium.LayerControl(collapsed = False).add_to(mapa)
mapa.save('covid_casos_br_2023.html')
mapa
# Introdução de mais elementos na visualização do mapa
html = 'layout_legenda.html'
def color_change(populacao):
if(populacao > 7500000):
return('purple')
elif(3500000 <= populacao <7500000):
return('orange')
else:
return('gray')
template = """
{% macro html(this, kwargs) %}
<!doctype html>
<html lang="utf-8">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mapeamento dos Casos e Óbitos Acumulados por COVID-19 (2023)</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body>
<div id='maplegend' class='maplegend'
style='position: absolute; z-index:9999; border:0px; background-color:rgba(255, 255, 255, 0.8);
border-radius:6px; padding: 10px; font-size:25px; right: 280px; bottom: 20px;'>
<div class='legend-title'><font size="2">Mapeamento da COVID-19 (2023)</div>
<div class='legend-scale'><font size="1">github.com/Atrylli</font></div>
</div>
<div id='maplegend' class='maplegend'
style='position: absolute; z-index:9999; border:2px solid white; background-color:rgba(255, 255, 255, 0.8);
border-radius:6px; padding: 10px; font-size:15px; left: 20px; bottom: 20px;'>
<div class='legend-scale'>
<div class='legend-title'>Marcadores populacionais</div>
<ul class='legend-labels'>
<li><span style='background:purple;opacity:0.5;'></span>Maior que 7500000 </li>
<li><span style='background:orange;opacity:0.5;'></span>Maior que 3500000</li>
<li><span style='background:gray;opacity:0.5;'></span>Menor que 3500000</li>
</ul>
<div class='legend-title'></div>
</div>
</div>
</body>
</html>
<style type='text/css'>
.maplegend .legend-title {
text-align: right;
margin-bottom: 5px;
font-weight: bold;
font-size: 90%;
}
.maplegend .legend-scale ul {
margin: 0;
margin-bottom: 5px;
padding: 0;
float: left;
list-style: none;
}
.maplegend .legend-scale ul li {
font-size: 80%;
list-style: none;
margin-left: 0;
line-height: 18px;
margin-bottom: 2px;
}
.maplegend ul.legend-labels li span {
display: block;
float: left;
height: 16px;
width: 30px;
margin-right: 5px;
margin-left: 0;
border: 1px solid #999;
}
.maplegend .legend-source {
font-size: 80%;
color: #777;
clear: both;
}
.maplegend a {
color: #777;
}
</style>
{% endmacro %}"""
mapa = folium.Map(
width = 700,
height = 600,
location = [-15.77972, -47.92972],
zoom_start = 3
)
folium.GeoJson(
estados_geoJSON,
name='Casos Acumulados de COVID-19 em 2023',
style_function=lambda feature: {
'fillColor': colorCasos(casosAc[feature['id']]),
'color': 'darkgrenn',
'weight': 0.3,
}
).add_to(mapa)
marker_cluster = MarkerCluster(name = 'Agrupamentos por estado').add_to(mapa)
for i,row in covid.iterrows():
folium.CircleMarker(
(row.latitude,row.longitude),
radius=9, weight=1,
color='black',
popup="Quantidade Populacional: "+str(row.populacao),
fill_color = color_change(row.populacao),
fill_opacity=.5).add_to(marker_cluster)
macro = MacroElement()
macro._template = Template(template)
mapa.get_root().add_child(macro)
colorCasos.caption ='Casos Acumulados de Covid no Brasil por Estado (2023)'
colorCasos.add_to(mapa)
folium.LayerControl('topright',collapsed = False).add_to(mapa)
mapa.save('covid_casos_br_2023.html')
mapa